home *** CD-ROM | disk | FTP | other *** search
- /*
- * the class STAGE_DIVIDE_CORE
- * Copyright (C) 1996, 1997 Kazutaka Hirata <khirata@jove.acs.unt.edu>
- */
-
- #include "../stdafx.h"
-
- #include "../common/bool.h"
-
- #include "stdivide.h"
-
- void STAGE_DIVIDE_CORE::erase_selected_line(KBAN_DRAW& draw)
- {
- draw.erase_primitive_line(*m_target);
- }
-
- void STAGE_DIVIDE_CORE::redraw_selected_line(KBAN_DRAW& draw)
- {
- draw.draw_primitive_line(*m_target, m_old_active_layer);
- }
-
- STAGE_DIVIDE_CORE::STAGE_DIVIDE_CORE(LINE_ELEMENT* target, uint layer)
- : m_target(target),
- m_old_active_layer(layer),
- m_mcur(*target),
- m_moved(FALSE),
- m_pc_old()
- {
- }
-
- STAGE_DIVIDE_CORE::STAGE_DIVIDE_CORE(LINE_ELEMENT* target, uint layer, const XY& pc_old)
- : m_target(target),
- m_old_active_layer(layer),
- m_mcur(*target),
- m_moved(TRUE),
- m_pc_old(pc_old)
- {
- }
-
- STAGE* STAGE_DIVIDE_CORE::init(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- info.bCaptured() = true;
- erase_selected_line(draw);
- if(m_moved.get()) {
- mouse_move(info, draw, m_pc_old, 0);
- } else {
- m_mcur.redraw_cursor(draw);
- }
- return this;
- }
-
- STAGE* STAGE_DIVIDE_CORE::redraw(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- erase_selected_line(draw);
- m_mcur.redraw_cursor(draw);
- return this;
- }
-
- STAGE* STAGE_DIVIDE_CORE::mouse_move(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- m_moved.set(TRUE);
- m_pc_old = pc;
-
- XY ac;
- info.grid().xy_pc2ac(pc, ac);
- m_mcur.draw_cursor(draw, ac);
- return this;
- }
-
- // This function is to be overridden but still need to be called.
-
- STAGE* STAGE_DIVIDE_CORE::mouse_left_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- m_mcur.erase_cursor(draw);
- XY ac;
- info.grid().xy_pc2ac(pc, ac);
-
- PRIMITIVE& primitive = info.kban_data().primitive();
- LINE_LIST& line_list = primitive.layer(info.active_layer().get()).line_list();
-
- LINE_ELEMENT l1(ac, m_target->ac_s(), m_target->width());
- line_list.push_back(l1);
- draw.draw_primitive_line(l1, m_old_active_layer);
-
- LINE_ELEMENT l2(ac, m_target->ac_e(), m_target->width());
- line_list.push_back(l2);
- draw.draw_primitive_line(l2, m_old_active_layer);
-
- line_list.delete_one(m_target);
-
- info.SetModifiedFlag();
- info.new_state().set(true);
- info.new_state_str() = "Divide";
-
- m_done.set(TRUE);
- return NULL;
- }
-
- // This function is to be overridden but still need to be called.
-
- STAGE* STAGE_DIVIDE_CORE::mouse_right_up(KBAN_INFO& info, KBAN_DRAW& draw, const XY& pc, UINT nFlags)
- {
- return NULL;
- }
-
- void STAGE_DIVIDE_CORE::end(KBAN_INFO& info, KBAN_DRAW& draw)
- {
- info.bCaptured() = false;
- if(!m_done.get()) {
- m_mcur.erase_cursor(draw);
- redraw_selected_line(draw);
- }
- }
-